import java.util.HashMap;
import java.util.Map;

/*
*
[ ["8","3",".",".","7",".",".",".","."],
* ["6",".",".","1","9","5",".",".","."],
* [".","9","8",".",".",".",".","6","."],
* ["8",".",".",".","6",".",".",".","3"],
* ["4",".",".","8",".","3",".",".","1"],
* ["7",".",".",".","2",".",".",".","6"],
* [".","6",".",".",".",".","2","8","."],
* [".",".",".","4","1","9",".",".","5"],
* [".",".",".",".","8",".",".","7","9"]]
*
* */

/**
 * @Description:
 * @Author: Hanzao
 * @Date: 2023/02/05/12:14
 */


/*[     {'.','.','4','.','.','.','6','3','.'},
        {'.','.','.','.','.','.','.','.','.'},
        {'5','.','.','.','.','.','.','9','.'},
        {'.','.','.','5','6','.','.','.','.'},
        {'4','.','3','.','.','.','.','.','1'},
        {'.','.','.','7','.','.','.','.','.'},
        {'.','.','.','5','.','.','.','.','.'},
        {'.','.','.','.','.','.','.','.','.'},
        {'.','.','.','.','.','.','.','.','.'}]*/

public class Demo1 {
    public static void main(String[] args) {
/*        for (int q = 0; q < 9; q++) {
            for (int w = 0; w < 9; w++) {
                int hang = w / 3 + q / 3 * 3;
                int lie = w % 3 + q % 3 * 3;
                System.out.print(hang + " " + lie + ", ");
            }
            System.out.println("");
        }*/
        char[][] arr = {
                {'.','.','4','.','.','.','6','3','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'5','.','.','.','.','.','.','9','.'},
                {'.','.','.','5','6','.','.','.','.'},
                {'4','.','3','.','.','.','.','.','1'},
                {'.','.','.','7','.','.','.','.','.'},
                {'.','.','.','5','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'},
                {'.','.','.','.','.','.','.','.','.'}};

        System.out.println(new Solution().isValidSudoku(arr));
    }
}

class Solution {
    public boolean isValidSudoku(char[][] board) {
        //建hashmap是为了存放数字和次数
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < 9; i++) {
            //先按照行进行存
            for (int j = 0; j < 9; j++) {
                //先按照行进行存放和校验
                if (!map.containsKey(board[i][j])) {
                    map.put(board[i][j], 1);
                } else {
                    map.put(board[i][j], 2);
                }
                if (checkMap(map) == false) {
                    return false;
                }
                map.clear();
                //按照列进行存放和校验
                if (!map.containsKey(board[j][i])) {
                    map.put(board[j][i], 1);
                } else {
                    map.put(board[j][i], 2);
                }
                if (checkMap(map) == false) {
                    return false;
                }
                map.clear();
            }
        }
        for (int q = 0; q < 9; q++) {
            for (int w = 0; w < 9; w++) {

                System.out.print(board[w / 3 + q / 3 * 3][w % 3 + q % 3 * 3] + " ");

                //按照3*3比较法
                if (!map.containsKey(board[w / 3 + q / 3 * 3][w % 3 + q % 3 * 3])) {
                    map.put(board[w / 3 + q / 3 * 3][w % 3 + q % 3 * 3], 1);
                } else {
                    map.put(board[w / 3 + q / 3 * 3][w % 3 + q % 3 * 3], 2);
                }
            }

            System.out.println("");

            if (checkMap(map) == false) {
                return false;
            }
            map.clear();
        }
        return true;
    }

    boolean checkMap(HashMap<Character, Integer> map) {
        if (map.containsKey('.')) {
            map.put('.', 1);
        }
        for (Character i : map.keySet()) {
            if (map.get(i) > 1) {
                return false;
            }
        }
        return true;
    }
}
